import {
	defineStore
} from 'pinia'
//应对华为审核
export default defineStore('permissions', {
	state: () => ({
		WRITE_EXTERNAL_STORAGE: uni.getStorageSync('WRITE_EXTERNAL_STORAGE'),
		READ_EXTERNAL_STORAGE: uni.getStorageSync('READ_EXTERNAL_STORAGE'),
		CALL_PHONE: uni.getStorageSync('CALL_PHONE'),
		isIos: uni.getSystemInfoSync().platform == "ios",
		ACCESS_FINE_LOCATION: uni.getStorageSync('ACCESS_FINE_LOCATION'),
		mapping: {
			'ACCESS_FINE_LOCATION': {
				title: "位置信息权限说明",
				content: "便于您快速填写地址信息",
				methods: 'SET_ACCESS_FINE_LOCATION'
			},
			'WRITE_EXTERNAL_STORAGE': {
				title: "存储空间/照片权限说明",
				content: "便于您使用该功能上传您的照片/图片/视频及用于更换头像、发布评论/分享、下载、与客服沟通等场景中读取和写入相册和文件内容。",
				methods: 'SET_WRITE_EXTERNAL_STORAGE'
			},
			'READ_EXTERNAL_STORAGE': {
				title: "存储空间/照片权限说明",
				content: "便于您使用该功能上传您的照片/图片/视频及用于更换头像、发布评论/分享、下载、与客服沟通等场景中读取和写入相册和文件内容。",
				methods: 'SET_READ_EXTERNAL_STORAGE'
			},
			'CALL_PHONE': {
				title: "拨打/管理电话权限说明",
				content: "便于您使用该功能联系商家或者商家与您联系等场景",
				methods: 'SET_CALL_PHONE'
			}
		}
	}),
	getters: {},
	actions: {

		isIosFun() {
			return uni.getSystemInfoSync().platform == "ios"
		},

		SET_WRITE_EXTERNAL_STORAGE(val) {
			this.WRITE_EXTERNAL_STORAGE = val
		},
		SET_ACCESS_FINE_LOCATION(val) {
			this.ACCESS_FINE_LOCATION = val
		},
		SET_CALL_PHONE(val) {
			this.CALL_PHONE = val
		},
		SET_READ_EXTERNAL_STORAGE(val) {
			this.READ_EXTERNAL_STORAGE = val
		},

		//提示框  
		nativeObjView(permissionID) {
			const systemInfo = uni.getSystemInfoSync();
			const statusBarHeight = systemInfo.statusBarHeight;
			const navigationBarHeight = systemInfo.platform === 'android' ? 48 :
				44; // Set the navigation bar height based on the platform  
			const totalHeight = statusBarHeight + navigationBarHeight;
			let view = new plus.nativeObj.View('per-modal', {
				top: '0px',
				left: '0px',
				width: '100%',
				backgroundColor: '#444',
				//opacity: '.9'   
			})
			view.drawRect({
				color: '#fff',
				radius: '5px'
			}, {
				top: totalHeight + 'px',
				left: '5%',
				width: '90%',
				height: "100px",
			})
			view.drawText(this.mapping[permissionID].title, {
				top: totalHeight + 5 + 'px',
				left: "8%",
				height: "30px"
			}, {
				align: "left",
				color: "#000",
			}, {
				onClick: function(e) {
					console.log(e);
				}
			})
			view.drawText(this.mapping[permissionID].content, {
				top: totalHeight + 35 + 'px',
				height: "60px",
				left: "8%",
				width: "84%"
			}, {
				whiteSpace: 'normal',
				size: "14px",
				align: "left",
				color: "#656563"
			})

			// function show() {
			// 	view = plus.nativeObj.View.getViewById('per-modal');
			// 	view.show()
			// 	view = null //这里要为null，不然隐藏不了，不知道为啥  
			// }
			function show() {
				view = plus.nativeObj.View.getViewById('per-modal');
				try {
					view.show()
				} catch (e) {
					console.log('error', e)
					//TODO handle the exception
				}
				// view = null //这里要为null，不然隐藏不了，不知道为啥  
			}

			function close() {
				view = plus.nativeObj.View.getViewById('per-modal');
				view.close();
				view = null
			}
			return {
				show,
				close
			}
		},

		// 跳转到**应用**的权限页面  
		gotoAppPermissionSetting() {
			if (this.isIos) {
				var UIApplication = plus.ios.import("UIApplication");
				var application2 = UIApplication.sharedApplication();
				var NSURL2 = plus.ios.import("NSURL");
				// var setting2 = NSURL2.URLWithString("prefs:root=LOCATION_SERVICES");       
				var setting2 = NSURL2.URLWithString("app-settings:");
				application2.openURL(setting2);

				plus.ios.deleteObject(setting2);
				plus.ios.deleteObject(NSURL2);
				plus.ios.deleteObject(application2);
			} else {
				// console.log(plus.device.vendor);  
				var Intent = plus.android.importClass("android.content.Intent");
				var Settings = plus.android.importClass("android.provider.Settings");
				var Uri = plus.android.importClass("android.net.Uri");
				var mainActivity = plus.android.runtimeMainActivity();
				var intent = new Intent();
				intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
				var uri = Uri.fromParts("package", mainActivity.getPackageName(), null);
				intent.setData(uri);
				mainActivity.startActivity(intent);
			}
		},
		//权限获取
		async requestPermissions(permissionID) {
			try {
				if (!this[permissionID]) {
					var viewObj = await this.nativeObjView(permissionID);
					viewObj.show();
				}
				console.log('android.permission.' + permissionID, '当前手机权限');
				return new Promise(async (resolve, reject) => {
					// Android权限查询  
					function requestAndroidPermission(permissionID_) {
						return new Promise((resolve, reject) => {
							plus.android.requestPermissions(
								[
									permissionID_
								], // 理论上支持多个权限同时查询，但实际上本函数封装只处理了一个权限的情况。有需要的可自行扩展封装  
								function(resultObj) {
									var result = 0;
									for (var i = 0; i < resultObj.granted
										.length; i++) {
										var grantedPermission = resultObj.granted[
											i];
										console.log('已获取的权限：' + grantedPermission);
										result = 1
									}
									for (var i = 0; i < resultObj.deniedPresent
										.length; i++) {
										var deniedPresentPermission = resultObj
											.deniedPresent[i];
										console.log('拒绝本次申请的权限：' +
											deniedPresentPermission);
										result = 0
									}
									for (var i = 0; i < resultObj.deniedAlways
										.length; i++) {
										var deniedAlwaysPermission = resultObj
											.deniedAlways[
												i];
										console.log('永久拒绝申请的权限：' +
											deniedAlwaysPermission);
										result = -1
									}
									resolve(result);
								},
								function(error) {
									console.log('申请权限错误：' + error.code + " = " +
										error
										.message);
									resolve({
										code: error.code,
										message: error.message
									});
								}
							);
						});
					}

					const result = await requestAndroidPermission(
						'android.permission.' + permissionID
					);

					if (result === 1) {
						//'已获得授权'  
						uni.setStorageSync(permissionID, true)
						this[this.mapping[permissionID].methods](true)
					} else if (result === 0) {
						//'未获得授权'  
						uni.setStorageSync(permissionID, false)
						this[this.mapping[permissionID].methods](false)
					} else {
						uni.setStorageSync(permissionID, true)
						this[this.mapping[permissionID].methods](true)
						uni.showModal({
							title: '提示',
							content: '操作权限已被拒绝，请手动前往设置',
							confirmText: "立即设置",
							success: (res) => {
								if (res.confirm) {
									this.gotoAppPermissionSetting()

								}
							}
						})
					}
					if (viewObj) viewObj.close()

					resolve(result);
				});
			} catch (error) {
				console.log(error);
				reject(error);
			}
		},
	}
})